#ifndef LOG_FACTORY_H
#define LOG_FACTORY_H

#include <memory>
#include <QObject>
#include "baselog.h"
#include "operationlog.h"
#include "errorlog.h"

/**
 * @brief 日志工厂类
 *
 * 采用工厂模式创建不同类型的日志实例，封装日志对象的创建逻辑，
 * 支持创建操作日志、错误日志等类型，便于日志类型的统一管理和扩展。
 */
class LogFactory : public QObject
{
    Q_OBJECT
public:
    /**
     * @brief 日志类型枚举
     * 定义系统支持的日志类型，新增日志类型需在此处扩展
     */
    enum class LogType {
        OperationLog,  // 操作日志：记录用户操作行为
        ErrorLog,      // 错误日志：记录系统错误信息
        SystemLog      // 系统日志：预留类型，用于记录系统状态信息
    };
    Q_ENUM(LogType)  // 注册枚举到Qt元对象系统，支持QML访问

    /**
     * @brief 构造函数
     * @param parent 父对象指针，用于Qt对象树管理
     */
    explicit LogFactory(QObject *parent = nullptr)
        : QObject(parent) {}

    /**
     * @brief 根据日志类型创建日志实例
     * @param type 日志类型（来自LogType枚举）
     * @return 指向BaseLog子类实例的智能指针，所有权由调用者管理
     * @note 对于未知日志类型，返回nullptr
     */
    static std::unique_ptr<BaseLog> create_log(LogType type) {
        switch (type) {
        case LogType::OperationLog:
            return std::make_unique<OperationLog>();
        case LogType::ErrorLog:
            return std::make_unique<ErrorLog>();
        case LogType::SystemLog:
            // 系统日志暂未实现，返回空指针
            return nullptr;
        default:
            return nullptr;
        }
    }
};

#endif // LOG_FACTORY_H
